﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharedTypes;

namespace AdaptationProject.Utils
{
    public interface IXMLParser
    {
        #region Properties
        /// <summary>
        /// Свойство определяющее, загружен ли в парсер
        /// какой либо документ в данный момент.
        /// </summary>
        bool IsLoaded { get; }
        #endregion // Constructor

        #region Methods
        /// <summary>
        /// Загружает ХМЛ файл.
        /// </summary>
        /// <param name="path">Абсолютный путь к ХМЛ файлу.</param>
        /// <returns>Истина если загрузка произошла успешно,
        /// иначе - ложь.</returns>
        bool Load(string path);

        /// <summary>
        /// Создаёт шаблон файла описания алгоритма.
        /// </summary>
        /// <param name="path">Абсолютный путь для размещения шаблона.</param>
        void CreateTemplateDocument(string path);

        /// <summary>
        /// Сохраняет документ по текущему пути.
        /// </summary>
        void Save();

        /// <summary>
        /// Сохраняет документ.
        /// </summary>
        /// <param name="newPath">Абсолютный путь.</param>
        void SaveTo(string newPath);

        /// <summary>
        /// Устанавливает заголовок файла описания алгоритма исполнительного файла.
        /// </summary>
        /// <param name="algorithmName">Имя алгоритма.</param>
        /// <param name="algorithmFullPath">Абсолютный путь к библиотеке, содержащей алгоритм.</param>
        /// <param name="exePath">Путь к исполняемому файлу, необходимому для функционирования алгоритма
        /// (может быть пустым).</param>
        void SetHeader(string algorithmName, string algorithmFullPath, string exePath);

        /// <summary>
        /// Возвращает имя алгоритма, указанное в его файле описания.
        /// </summary>
        /// <returns>Имя алгоритма исполнительного файла.</returns>
        string GetAlgorithmName();

        /// <summary>
        /// Возвращает путь к библиотеке, содержащей алгоритм исполнительного файла. 
        /// </summary>
        /// <returns>Путь к библиотеке.</returns>
        string GetAlgorithmPath();

        /// <summary>
        /// Возвращает путь к исполняемому файлу алгоритма исполнительного файла. 
        /// </summary>
        /// <returns>Путь к исполняемому файлу.</returns>
        string GetExePath();

        /// <summary>
        /// Загружает список адаптируемых параметров алгоритма исполнительного файла.
        /// </summary>
        /// <returns>Список адаптируемых параметров.</returns>
        IDictionary<int, LinkedParameter> GetAlgorithmParameters();
        #endregion // Methods
    }
}
